In [2]:
# Para evitar los warnings de python
import warnings
warnings.filterwarnings('ignore')
%reload_ext sage
In [3]:
# Definimos el cuerpo donde vamos a trabajar
m = 4
K = GF(2)
F.<a> = GF(2^m)
In [6]:
# Creamos el anillo de polinomios
PR = PolynomialRing(F,'X')
X = PR.gen()
N = 15
L = [a^i for i in range(N)]
g = X^3 + X + 1
In [4]:
# Imprimimos el polinomio que hemos creado
print ("Polinomio de Goppa \n\n\t g(x)= " + str(g))
In [5]:
# Declaración de variables
rango = 3
Comenzamos creando la matriz T
In [6]:
T = matrix(F,rango,rango)
for i in range(rango):
count = rango - i + 1 - 1
for j in range(rango):
if i > j:
T[i,j]=g.list()[count]
count = count + 1
if i < j:
T[i,j] = 0
if i == j:
T[i,j] = 1
In [7]:
print ("Matriz T: ")
show(T)
Out[7]:
Definimos ahora nuestras matriz Y y Z
In [9]:
Y = matrix([[L[j]^i for j in range(N)] for i in range(rango)]) # La matriz Y es de tamaño (rango x n : rango=3 filas y n columnas)
show(Y)
Out[9]:
In [10]:
Z = diagonal_matrix([1/g(L[i]) for i in range(N)]) # La matriz Z sabemos es diagonal y de tamaño n x n.
show(Z)
Out[10]:
Calculamos ahora la matriz H generadora del código
In [11]:
H = T*Y*Z
show(H)
Out[11]:
In [0]: